package com.common.util;

import com.base.exception.NormalRuntimeException;
import com.base.exception.ValidateException;
import org.springframework.validation.BindingResult;

import java.util.function.Supplier;

/**
 * 断言与判断类。
 * 该类提供一些简单可行的辅助方法
 * 以access开头的方法都是断言方法，断言失败后续代码将不再执行。
 * is开头的方法都是判断方法，判断不通过则返回false。
 * helpCreate方法是创建相应参数的方法
 * Created by Shisan on 2017/2/9.
 */
public class AccessUtil {

    /**
     * 断言数据校验是否通过
     * @param br
     */
    public static void accessValidate(BindingResult br){
        if(br.getErrorCount() > 0){
            throw new ValidateException(br);
        }
    }

    /**
     * 断言是否成功，
     * @param success
     * @param message 断言失败后返回的消息
     */
    public static void accessSuccess(boolean success,String message){
        if(!success){
            throw new NormalRuntimeException(message==null?"操作失败":message);
        }
    }

    /**
     * 所有的删除更新和插入操作都有返回值。当返回值为空或为0时，则表示操作失败。
     * @param index
     */
    public static void accessHandle(Integer index,String message){
        if(index == null || index < 1){
            throw new NormalRuntimeException(message==null?"操作失败":message);
        }
    }

    /**
     * 选择性操作，可以在true与false之间选择性执行
     * @param success
     * @param successToDo
     * @param failerToDo
     * @param <T>
     * @return
     */
    public static <T>T confirmToDo(boolean success, Supplier<T> successToDo, Supplier<T> failerToDo){
        if(success){
            if(successToDo != null){
                return successToDo.get();
            }
        }else{
            if(failerToDo != null){
                return failerToDo.get();
            }
        }
        return null;
    }

}

